﻿using System;
using System.ServiceModel;
using FU.Capstones.IMS.Web.Common.InventoryServiceProxy.DataContracts;
using FU.Capstones.IMS.Web.Common.InventoryServiceProxy.Respondents;

namespace FU.Capstones.IMS.Web.Common.InventoryServiceProxy.Interfaces
{
    [ServiceContract(Namespace = WebConstants.ServiceNamespace,
                    Name = WebConstants.ServiceName,
                    ConfigurationName = WebConstants.ServiceConfigurationName)]
    public interface IInventoryService
    {
        #region Account

        ////----------------
        //[OperationContractAttribute(AsyncPattern = true,
        //                            Action = "http://www.ims.com/InventoryService/GetAccountCollection",
        //                            ReplyAction = "http://www.ims.com/InventoryService/GetAccountCollectionResponse")]
        //IAsyncResult BeginGetAccountCollection(bool isShowAll, AsyncCallback callback, object asyncState);

        //CollectionFeedback<Account> EndGetAccountCollection(IAsyncResult result);

        ////----------------
        //[OperationContractAttribute(AsyncPattern = true,
        //                            Action = "http://www.ims.com/InventoryService/GetSingleAccount",
        //                            ReplyAction = "http://www.ims.com/InventoryService/GetSingleAccountResponse")]
        //IAsyncResult BeginGetSingleAccount(int accountID, AsyncCallback callback, object asyncState);

        //SingleFeedback<Account> EndGetSingleAccount(IAsyncResult result);

        ////----------------
        //[OperationContractAttribute(AsyncPattern = true,
        //                            Action = "http://www.ims.com/InventoryService/InsertAccount",
        //                            ReplyAction = "http://www.ims.com/InventoryService/InsertAccountResponse")]
        //IAsyncResult BeginInsertAccount(Account data, AsyncCallback callback, object asyncState);

        //SingleFeedback<int> EndInsertAccount(IAsyncResult result);

        ////----------------
        //[OperationContractAttribute(AsyncPattern = true,
        //                            Action = "http://www.ims.com/InventoryService/UpdateAccount",
        //                            ReplyAction = "http://www.ims.com/InventoryService/UpdateAccountResponse")]
        //IAsyncResult BeginUpdateAccount(Account data, AsyncCallback callback, object asyncState);

        //Feedback EndUpdateAccount(IAsyncResult result);

        ////----------------
        //[OperationContractAttribute(AsyncPattern = true,
        //                            Action = "http://www.ims.com/InventoryService/DeleteAccount",
        //                            ReplyAction = "http://www.ims.com/InventoryService/DeleteAccountResponse")]
        //IAsyncResult BeginDeleteAccount(int objID, AsyncCallback callback, object asyncState);

        //Feedback EndDeleteAccount(IAsyncResult result);

        ////----------------
        //[OperationContractAttribute(AsyncPattern = true,
        //                            Action = "http://www.ims.com/InventoryService/SearchAccount",
        //                            ReplyAction = "http://www.ims.com/InventoryService/SearchAccountResponse")]
        //IAsyncResult BeginSearchAccount(Account criteria, AsyncCallback callback, object asyncState);

        //CollectionFeedback<Account> EndSearchAccount(IAsyncResult result);


        ////----------------
        //[OperationContractAttribute(AsyncPattern = true,
        //                            Action = "http://www.ims.com/InventoryService/UndoDeleteAccount",
        //                            ReplyAction = "http://www.ims.com/InventoryService/UndoDeleteAccountResponse")]
        //IAsyncResult BeginUndoDeleteAccount(int objID, AsyncCallback callback, object asyncState);

        //Feedback EndUndoDeleteAccount(IAsyncResult result);
        
        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/Login",
                                    ReplyAction = "http://www.ims.com/InventoryService/LoginResponse")]
        IAsyncResult BeginLogin(Account account, AsyncCallback callback, object asyncState);

        SingleFeedback<Account> EndLogin(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/CheckIfUsernameExists",
                                    ReplyAction = "http://www.ims.com/InventoryService/CheckIfUsernameExistsResponse")]
        IAsyncResult BeginCheckIfUsernameExists(string usernameToCheck, AsyncCallback callback, object asyncState);

        Feedback EndCheckIfUsernameExists(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/ResetPassword",
                                    ReplyAction = "http://www.ims.com/InventoryService/ResetPasswordResponse")]
        IAsyncResult BeginResetPassword(Account account, AsyncCallback callback, object asyncState);

        Feedback EndResetPassword(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/ChangePassword",
                                    ReplyAction = "http://www.ims.com/InventoryService/ChangePasswordResponse")]
        IAsyncResult BeginChangePassword(NewPasswordData account, AsyncCallback callback, object asyncState);

        Feedback EndChangePassword(IAsyncResult result);
        

        #endregion

        #region Authorization

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/GetAuthorizationCollection",
                                    ReplyAction = "http://www.ims.com/InventoryService/GetAuthorizationCollectionResponse")]
        IAsyncResult BeginGetAuthorizationCollection(bool isShowAll, AsyncCallback callback, object asyncState);

        CollectionFeedback<Authorization> EndGetAuthorizationCollection(IAsyncResult result);
        
        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/GetSingleAuthorization",
                                    ReplyAction = "http://www.ims.com/InventoryService/GetSingleAuthorizationResponse")]
        IAsyncResult BeginGetSingleAuthorization(int objectID, AsyncCallback callback, object asyncState);

        SingleFeedback<Authorization> EndGetSingleAuthorization(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/InsertAuthorization",
                                    ReplyAction = "http://www.ims.com/InventoryService/InsertAuthorizationResponse")]
        IAsyncResult BeginInsertAuthorization(Authorization data, AsyncCallback callback, object asyncState);

        SingleFeedback<int> EndInsertAuthorization(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/UpdateAuthorization",
                                    ReplyAction = "http://www.ims.com/InventoryService/UpdateAuthorizationResponse")]
        IAsyncResult BeginUpdateAuthorization(Authorization data, AsyncCallback callback, object asyncState);

        Feedback EndUpdateAuthorization(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/DeleteAuthorization",
                                    ReplyAction = "http://www.ims.com/InventoryService/DeleteAuthorizationResponse")]
        IAsyncResult BeginDeleteAuthorization(int objID, AsyncCallback callback, object asyncState);

        Feedback EndDeleteAuthorization(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/SearchAuthorization",
                                    ReplyAction = "http://www.ims.com/InventoryService/SearchAuthorizationResponse")]
        IAsyncResult BeginSearchAuthorization(Authorization criteria, AsyncCallback callback, object asyncState);

        CollectionFeedback<Authorization> EndSearchAuthorization(IAsyncResult result);

        #endregion

        #region Contact

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/GetContactCollection",
                                    ReplyAction = "http://www.ims.com/InventoryService/GetContactCollectionResponse")]
        IAsyncResult BeginGetContactCollection(bool isShowAll, AsyncCallback callback, object asyncState);

        CollectionFeedback<Contact> EndGetContactCollection(IAsyncResult result);
        
        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/GetSingleContact",
                                    ReplyAction = "http://www.ims.com/InventoryService/GetSingleContactResponse")]
        IAsyncResult BeginGetSingleContact(int contactID, AsyncCallback callback, object asyncState);

        SingleFeedback<Contact> EndGetSingleContact(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/InsertContact",
                                    ReplyAction = "http://www.ims.com/InventoryService/InsertContactResponse")]
        IAsyncResult BeginInsertContact(Contact data, AsyncCallback callback, object asyncState);

        SingleFeedback<int> EndInsertContact(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/UpdateContact",
                                    ReplyAction = "http://www.ims.com/InventoryService/UpdateContactResponse")]
        IAsyncResult BeginUpdateContact(Contact data, AsyncCallback callback, object asyncState);

        Feedback EndUpdateContact(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/DeleteContact",
                                    ReplyAction = "http://www.ims.com/InventoryService/DeleteContactResponse")]
        IAsyncResult BeginDeleteContact(int objID, AsyncCallback callback, object asyncState);

        Feedback EndDeleteContact(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/SearchContact",
                                    ReplyAction = "http://www.ims.com/InventoryService/SearchContactResponse")]
        IAsyncResult BeginSearchContact(Contact criteria, AsyncCallback callback, object asyncState);

        CollectionFeedback<Contact> EndSearchContact(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/UndoDeleteContact",
                                    ReplyAction = "http://www.ims.com/InventoryService/UndoDeleteContactResponse")]
        IAsyncResult BeginUndoDeleteContact(int objID, AsyncCallback callback, object asyncState);

        Feedback EndUndoDeleteContact(IAsyncResult result);
        

        #endregion

        #region Employee

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/GetEmployeeCollection",
                                    ReplyAction = "http://www.ims.com/InventoryService/GetEmployeeCollectionResponse")]
        IAsyncResult BeginGetEmployeeCollection(bool isShowAll, AsyncCallback callback, object asyncState);

        CollectionFeedback<Employee> EndGetEmployeeCollection(IAsyncResult result);
        
        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/GetSingleEmployee",
                                    ReplyAction = "http://www.ims.com/InventoryService/GetSingleEmployeeResponse")]
        IAsyncResult BeginGetSingleEmployee(int objectID, AsyncCallback callback, object asyncState);

        SingleFeedback<Employee> EndGetSingleEmployee(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/InsertEmployee",
                                    ReplyAction = "http://www.ims.com/InventoryService/InsertEmployeeResponse")]
        IAsyncResult BeginInsertEmployee(Employee data, AsyncCallback callback, object asyncState);

        SingleFeedback<int> EndInsertEmployee(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/UpdateEmployee",
                                    ReplyAction = "http://www.ims.com/InventoryService/UpdateEmployeeResponse")]
        IAsyncResult BeginUpdateEmployee(Employee data, AsyncCallback callback, object asyncState);

        Feedback EndUpdateEmployee(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/DeleteEmployee",
                                    ReplyAction = "http://www.ims.com/InventoryService/DeleteEmployeeResponse")]
        IAsyncResult BeginDeleteEmployee(int objID, AsyncCallback callback, object asyncState);

        Feedback EndDeleteEmployee(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/SearchEmployee",
                                    ReplyAction = "http://www.ims.com/InventoryService/SearchEmployeeResponse")]
        IAsyncResult BeginSearchEmployee(EmployeeCriteria criteria, AsyncCallback callback, object asyncState);

        CollectionFeedback<Employee> EndSearchEmployee(IAsyncResult result);


        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/UndoDeleteEmployee",
                                    ReplyAction = "http://www.ims.com/InventoryService/UndoDeleteEmployeeResponse")]
        IAsyncResult BeginUndoDeleteEmployee(int objID, AsyncCallback callback, object asyncState);

        Feedback EndUndoDeleteEmployee(IAsyncResult result);
        
        #endregion

        #region EmploymentType

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/GetEmploymentTypeCollection",
                                    ReplyAction = "http://www.ims.com/InventoryService/GetEmploymentTypeCollectionResponse")]
        IAsyncResult BeginGetEmploymentTypeCollection(bool isShowAll, AsyncCallback callback, object asyncState);

        CollectionFeedback<EmploymentType> EndGetEmploymentTypeCollection(IAsyncResult result);
        
        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/GetSingleEmploymentType",
                                    ReplyAction = "http://www.ims.com/InventoryService/GetSingleEmploymentTypeResponse")]
        IAsyncResult BeginGetSingleEmploymentType(int employmentTypeID, AsyncCallback callback, object asyncState);

        SingleFeedback<EmploymentType> EndGetSingleEmploymentType(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/InsertEmploymentType",
                                    ReplyAction = "http://www.ims.com/InventoryService/InsertEmploymentTypeResponse")]
        IAsyncResult BeginInsertEmploymentType(EmploymentType data, AsyncCallback callback, object asyncState);

        SingleFeedback<int> EndInsertEmploymentType(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/UpdateEmploymentType",
                                    ReplyAction = "http://www.ims.com/InventoryService/UpdateEmploymentTypeResponse")]
        IAsyncResult BeginUpdateEmploymentType(EmploymentType data, AsyncCallback callback, object asyncState);

        Feedback EndUpdateEmploymentType(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/DeleteEmploymentType",
                                    ReplyAction = "http://www.ims.com/InventoryService/DeleteEmploymentTypeResponse")]
        IAsyncResult BeginDeleteEmploymentType(int objID, AsyncCallback callback, object asyncState);

        Feedback EndDeleteEmploymentType(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/SearchEmploymentType",
                                    ReplyAction = "http://www.ims.com/InventoryService/SearchEmploymentTypeResponse")]
        IAsyncResult BeginSearchEmploymentType(EmploymentType criteria, AsyncCallback callback, object asyncState);

        CollectionFeedback<EmploymentType> EndSearchEmploymentType(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/UndoDeleteEmploymentType",
                                    ReplyAction = "http://www.ims.com/InventoryService/UndoDeleteEmploymentTypeResponse")]
        IAsyncResult BeginUndoDeleteEmploymentType(int objID, AsyncCallback callback, object asyncState);

        Feedback EndUndoDeleteEmploymentType(IAsyncResult result);
        

        #endregion

        #region Material

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/GetMaterialCollection",
                                    ReplyAction = "http://www.ims.com/InventoryService/GetMaterialCollectionResponse")]
        IAsyncResult BeginGetMaterialCollection(bool isShowAll, AsyncCallback callback, object asyncState);

        CollectionFeedback<Material> EndGetMaterialCollection(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/GetMaterialCollectionType",
                                    ReplyAction = "http://www.ims.com/InventoryService/GetMaterialCollectionTypeResponse")]
        IAsyncResult BeginGetMaterialCollectionType(bool isShowAll, AsyncCallback callback, object asyncState);

        CollectionFeedback<Material> EndGetMaterialCollectionType(IAsyncResult result);
        
        
        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/GetSingleMaterial",
                                    ReplyAction = "http://www.ims.com/InventoryService/GetSingleMaterialResponse")]
        IAsyncResult BeginGetSingleMaterial(int materialID, AsyncCallback callback, object asyncState);

        SingleFeedback<Material> EndGetSingleMaterial(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/InsertMaterial",
                                    ReplyAction = "http://www.ims.com/InventoryService/InsertMaterialResponse")]
        IAsyncResult BeginInsertMaterial(Material data, AsyncCallback callback, object asyncState);

        SingleFeedback<int> EndInsertMaterial(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/UpdateMaterial",
                                    ReplyAction = "http://www.ims.com/InventoryService/UpdateMaterialResponse")]
        IAsyncResult BeginUpdateMaterial(Material data, AsyncCallback callback, object asyncState);

        Feedback EndUpdateMaterial(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/DeleteMaterial",
                                    ReplyAction = "http://www.ims.com/InventoryService/DeleteMaterialResponse")]
        IAsyncResult BeginDeleteMaterial(int objID, AsyncCallback callback, object asyncState);

        Feedback EndDeleteMaterial(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/SearchMaterial",
                                    ReplyAction = "http://www.ims.com/InventoryService/SearchMaterialResponse")]
        IAsyncResult BeginSearchMaterial(MaterialCriteria criteria, AsyncCallback callback, object asyncState);

        CollectionFeedback<Material> EndSearchMaterial(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/UndoDeleteMaterial",
                                    ReplyAction = "http://www.ims.com/InventoryService/UndoDeleteMaterialResponse")]
        IAsyncResult BeginUndoDeleteMaterial(int objID, AsyncCallback callback, object asyncState);

        Feedback EndUndoDeleteMaterial(IAsyncResult result);
        

        #endregion

        #region Order

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/GetOrderCollectionByParameter",
                                    ReplyAction = "http://www.ims.com/InventoryService/GetOrderCollectionByParameterResponse")]
        IAsyncResult BeginGetOrderCollectionByParameter(bool? isMaterial, AsyncCallback callback, object asyncState);

        CollectionFeedback<Order> EndGetOrderCollectionByParameter(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/GetOrderCollection",
                                    ReplyAction = "http://www.ims.com/InventoryService/GetOrderCollectionResponse")]
        IAsyncResult BeginGetOrderCollection(bool isShowAll, AsyncCallback callback, object asyncState);

        CollectionFeedback<Order> EndGetOrderCollection(IAsyncResult result);
        
        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/GetSingleOrder",
                                    ReplyAction = "http://www.ims.com/InventoryService/GetSingleOrderResponse")]
        IAsyncResult BeginGetSingleOrder(int orderID, AsyncCallback callback, object asyncState);

        SingleFeedback<Order> EndGetSingleOrder(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/InsertOrder",
                                    ReplyAction = "http://www.ims.com/InventoryService/InsertOrderResponse")]
        IAsyncResult BeginInsertOrder(Order data, AsyncCallback callback, object asyncState);

        SingleFeedback<int> EndInsertOrder(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/UpdateOrder",
                                    ReplyAction = "http://www.ims.com/InventoryService/UpdateOrderResponse")]
        IAsyncResult BeginUpdateOrder(Order data, AsyncCallback callback, object asyncState);

        Feedback EndUpdateOrder(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/DeleteOrder",
                                    ReplyAction = "http://www.ims.com/InventoryService/DeleteOrderResponse")]
        IAsyncResult BeginDeleteOrder(int objID, AsyncCallback callback, object asyncState);

        Feedback EndDeleteOrder(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/SearchOrder",
                                    ReplyAction = "http://www.ims.com/InventoryService/SearchOrderResponse")]
        IAsyncResult BeginSearchOrder(OrderCriteria criteria, AsyncCallback callback, object asyncState);

        CollectionFeedback<Order> EndSearchOrder(IAsyncResult result);

        #endregion

        #region Partner

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/GetPartnerCollectionByParam",
                                    ReplyAction = "http://www.ims.com/InventoryService/GetPartnerCollectionByParamResponse")]
        IAsyncResult BeginGetPartnerCollectionByParam(bool? isSupplier, AsyncCallback callback, object asyncState);

        CollectionFeedback<Partner> EndGetPartnerCollectionByParam(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/GetPartnerCollection",
                                    ReplyAction = "http://www.ims.com/InventoryService/GetPartnerCollectionResponse")]
        IAsyncResult BeginGetPartnerCollection(bool isShowAll, AsyncCallback callback, object asyncState);

        CollectionFeedback<Partner> EndGetPartnerCollection(IAsyncResult result);
        
        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/GetSinglePartner",
                                    ReplyAction = "http://www.ims.com/InventoryService/GetSinglePartnerResponse")]
        IAsyncResult BeginGetSinglePartner(int partnerID, AsyncCallback callback, object asyncState);

        SingleFeedback<Partner> EndGetSinglePartner(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/InsertPartner",
                                    ReplyAction = "http://www.ims.com/InventoryService/InsertPartnerResponse")]
        IAsyncResult BeginInsertPartner(Partner data, AsyncCallback callback, object asyncState);

        SingleFeedback<int> EndInsertPartner(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/UpdatePartner",
                                    ReplyAction = "http://www.ims.com/InventoryService/UpdatePartnerResponse")]
        IAsyncResult BeginUpdatePartner(Partner data, AsyncCallback callback, object asyncState);

        Feedback EndUpdatePartner(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/DeletePartner",
                                    ReplyAction = "http://www.ims.com/InventoryService/DeletePartnerResponse")]
        IAsyncResult BeginDeletePartner(int objID, AsyncCallback callback, object asyncState);

        Feedback EndDeletePartner(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/SearchPartner",
                                    ReplyAction = "http://www.ims.com/InventoryService/SearchPartnerResponse")]
        IAsyncResult BeginSearchPartner(Partner criteria, AsyncCallback callback, object asyncState);

        CollectionFeedback<Partner> EndSearchPartner(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/UndoDeletePartner",
                                    ReplyAction = "http://www.ims.com/InventoryService/UndoDeletePartnerResponse")]
        IAsyncResult BeginUndoDeletePartner(int objID, AsyncCallback callback, object asyncState);

        Feedback EndUndoDeletePartner(IAsyncResult result);
        

        #endregion

        #region Product

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/GetProductCollection",
                                    ReplyAction = "http://www.ims.com/InventoryService/GetProductCollectionResponse")]
        IAsyncResult BeginGetProductCollection(bool isShowAll, AsyncCallback callback, object asyncState);

        CollectionFeedback<Product> EndGetProductCollection(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/GetProductCollectionType",
                                    ReplyAction = "http://www.ims.com/InventoryService/GetProductCollectionTypeResponse")]
        IAsyncResult BeginGetProductCollectionType(bool isShowAll, AsyncCallback callback, object asyncState);

        CollectionFeedback<Product> EndGetProductCollectionType(IAsyncResult result);
        
        
        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/GetSingleProduct",
                                    ReplyAction = "http://www.ims.com/InventoryService/GetSingleProductResponse")]
        IAsyncResult BeginGetSingleProduct(int productID, AsyncCallback callback, object asyncState);

        SingleFeedback<Product> EndGetSingleProduct(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/InsertProduct",
                                    ReplyAction = "http://www.ims.com/InventoryService/InsertProductResponse")]
        IAsyncResult BeginInsertProduct(Product data, AsyncCallback callback, object asyncState);

        SingleFeedback<int> EndInsertProduct(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/InsertBuiltupMaterial",
                                    ReplyAction = "http://www.ims.com/InventoryService/InsertBuiltupMaterialResponse")]
        IAsyncResult BeginInsertBuiltupMaterial(int pID, int mID, long mQuantity, AsyncCallback callback, object asyncState);

        Feedback EndInsertBuiltupMaterial(IAsyncResult result);
        

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/UpdateProduct",
                                    ReplyAction = "http://www.ims.com/InventoryService/UpdateProductResponse")]
        IAsyncResult BeginUpdateProduct(Product data, AsyncCallback callback, object asyncState);

        Feedback EndUpdateProduct(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/DeleteProduct",
                                    ReplyAction = "http://www.ims.com/InventoryService/DeleteProductResponse")]
        IAsyncResult BeginDeleteProduct(int objID, AsyncCallback callback, object asyncState);

        Feedback EndDeleteProduct(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/DeleteProductBuiltup",
                                    ReplyAction = "http://www.ims.com/InventoryService/DeleteProductBuiltupResponse")]
        IAsyncResult BeginDeleteProductBuiltup(int pID, int mID, AsyncCallback callback, object asyncState);

        Feedback EndDeleteProductBuiltup(IAsyncResult result);
        

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/SearchProduct",
                                    ReplyAction = "http://www.ims.com/InventoryService/SearchProductResponse")]
        IAsyncResult BeginSearchProduct(ProductCriteria criteria, AsyncCallback callback, object asyncState);

        CollectionFeedback<Product> EndSearchProduct(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/UndoDeleteProduct",
                                    ReplyAction = "http://www.ims.com/InventoryService/UndoDeleteProductResponse")]
        IAsyncResult BeginUndoDeleteProduct(int objID, AsyncCallback callback, object asyncState);

        Feedback EndUndoDeleteProduct(IAsyncResult result);
        

        #endregion

        #region Role

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/GetRoleCollection",
                                    ReplyAction = "http://www.ims.com/InventoryService/GetRoleCollectionResponse")]
        IAsyncResult BeginGetRoleCollection(bool isShowAll, AsyncCallback callback, object asyncState);

        CollectionFeedback<Role> EndGetRoleCollection(IAsyncResult result);
        
        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/GetSingleRole",
                                    ReplyAction = "http://www.ims.com/InventoryService/GetSingleRoleResponse")]
        IAsyncResult BeginGetSingleRole(int roleID, AsyncCallback callback, object asyncState);

        SingleFeedback<Role> EndGetSingleRole(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/InsertRole",
                                    ReplyAction = "http://www.ims.com/InventoryService/InsertRoleResponse")]
        IAsyncResult BeginInsertRole(Role data, AsyncCallback callback, object asyncState);

        SingleFeedback<int> EndInsertRole(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/UpdateRole",
                                    ReplyAction = "http://www.ims.com/InventoryService/UpdateRoleResponse")]
        IAsyncResult BeginUpdateRole(Role data, AsyncCallback callback, object asyncState);

        Feedback EndUpdateRole(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/DeleteRole",
                                    ReplyAction = "http://www.ims.com/InventoryService/DeleteRoleResponse")]
        IAsyncResult BeginDeleteRole(int objID, AsyncCallback callback, object asyncState);

        Feedback EndDeleteRole(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/SearchRole",
                                    ReplyAction = "http://www.ims.com/InventoryService/SearchRoleResponse")]
        IAsyncResult BeginSearchRole(Role criteria, AsyncCallback callback, object asyncState);

        CollectionFeedback<Role> EndSearchRole(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/UndoDeleteRole",
                                    ReplyAction = "http://www.ims.com/InventoryService/UndoDeleteRoleResponse")]
        IAsyncResult BeginUndoDeleteRole(int objID, AsyncCallback callback, object asyncState);

        Feedback EndUndoDeleteRole(IAsyncResult result);
        

        #endregion

        #region Warehouse

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/GetWarehouseCollection",
                                    ReplyAction = "http://www.ims.com/InventoryService/GetWarehouseCollectionResponse")]
        IAsyncResult BeginGetWarehouseCollection(bool isShowAll, AsyncCallback callback, object asyncState);

        CollectionFeedback<Warehouse> EndGetWarehouseCollection(IAsyncResult result);
        
        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/GetSingleWarehouse",
                                    ReplyAction = "http://www.ims.com/InventoryService/GetSingleWarehouseResponse")]
        IAsyncResult BeginGetSingleWarehouse(int warehouseID, AsyncCallback callback, object asyncState);

        SingleFeedback<Warehouse> EndGetSingleWarehouse(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/InsertWarehouse",
                                    ReplyAction = "http://www.ims.com/InventoryService/InsertWarehouseResponse")]
        IAsyncResult BeginInsertWarehouse(Warehouse data, AsyncCallback callback, object asyncState);

        SingleFeedback<int> EndInsertWarehouse(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/UpdateWarehouse",
                                    ReplyAction = "http://www.ims.com/InventoryService/UpdateWarehouseResponse")]
        IAsyncResult BeginUpdateWarehouse(Warehouse data, AsyncCallback callback, object asyncState);

        Feedback EndUpdateWarehouse(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/DeleteWarehouse",
                                    ReplyAction = "http://www.ims.com/InventoryService/DeleteWarehouseResponse")]
        IAsyncResult BeginDeleteWarehouse(int objID, AsyncCallback callback, object asyncState);

        Feedback EndDeleteWarehouse(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/SearchWarehouse",
                                    ReplyAction = "http://www.ims.com/InventoryService/SearchWarehouseResponse")]
        IAsyncResult BeginSearchWarehouse(Warehouse criteria, AsyncCallback callback, object asyncState);

        CollectionFeedback<Warehouse> EndSearchWarehouse(IAsyncResult result);

        //----------------
        [OperationContractAttribute(AsyncPattern = true,
                                    Action = "http://www.ims.com/InventoryService/UndoDeleteWarehouse",
                                    ReplyAction = "http://www.ims.com/InventoryService/UndoDeleteWarehouseResponse")]
        IAsyncResult BeginUndoDeleteWarehouse(int objID, AsyncCallback callback, object asyncState);

        Feedback EndUndoDeleteWarehouse(IAsyncResult result);
        

        #endregion
    }
}
